class Animal {

    animalName = "动物";

    // 如果一个类，没有写构造方法，默认有无参构造方法

    eat() {
        console.log(this.animalName + "捕食之后直接吃！");
    }

    sleep() {
        console.log(this.animalName + "找个地方直接睡");
    }
}

// 让Mamalian继承Animal
class Mammalian extends Animal{

    // constructor() {
    //     super();
    //     this.animalName = "哺乳动物";
    // }

    nurse() {
        console.log(this.animalName + "正在给自己的小孩喂奶！");
    }
}

class Human extends Mammalian {

    // 子类，可以重新定义父类的方法：方法重写
    // 方法重写是面向对象语言，多态特征的实现之一。
    // 对于同一种行为，子类拥有不同的表现方式。
    eat() {
        console.log(this.name + "把食物煮熟了吃。");
    }

    sleep() {
        console.log(this.name + "回到家，躺在床上睡觉。");
    }
}

let animal = new Animal();
animal.sleep();
animal.eat();

let mammalian1 = new Mammalian();
mammalian1.animalName = "哺乳动物";
mammalian1.sleep();
mammalian1.eat();
mammalian1.nurse();

let ckd = new Human();
ckd.name = "陈科地";
ckd.eat();
ckd.sleep();